﻿-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 Nicolas Casalini
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
--
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
local Object = require "engine.Object"

newTalent{
	name = "Frost Infusion",
	kr_name = "냉기 주입",
	type = {"spell/frost-alchemy", 1},
	mode = "sustained",
	require = spells_req1,
	sustain_mana = 30,
	points = 5,
	cooldown = 30,
	tactical = { BUFF = 2 },
	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) * 100 end,
	activate = function(self, t)
		cancelAlchemyInfusions(self)
		game:playSoundNear(self, "talents/arcane")
		local ret = {}
		self:talentTemporaryValue(ret, "inc_damage", {[DamageType.COLD] = t.getIncrease(self, t)})
		return ret
	end,
	deactivate = function(self, t, p)
		return true
	end,
	info = function(self, t)
		local daminc = t.getIncrease(self, t)
		return ([[연금술 폭탄을 던질 때, 적을 빙결시킬 수 있는 냉기를 주입해 던집니다.
		또한, 모든 냉기 피해량이 %d%% 증가합니다.]]):
		format(daminc)
	end,
}

newTalent{
	name = "Ice Armour",
	kr_name = "얼음 갑옷",
	type = {"spell/frost-alchemy", 2},
	require = spells_req2,
	mode = "passive",
	points = 5,
	getDuration = function(self, t) return math.floor(self:combatScale(self:combatSpellpower(0.03) * self:getTalentLevel(t), 2, 0, 10, 8)) end,
	getArmor = function(self, t) return self:combatTalentSpellDamage(t, 10, 25) end,
	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 5, 70) end,
	applyEffect = function(self, t, golem)
		local duration = t.getDuration(self, t)
		local dam = t.getDamage(self, t)
		local armor = t.getArmor(self, t)
		golem:setEffect(golem.EFF_ICE_ARMOUR, duration, {armor=armor, dam=dam})
	end,
	info = function(self, t)
		local duration = t.getDuration(self, t)
		local dam = self.alchemy_golem and self.alchemy_golem:damDesc(engine.DamageType.COLD, t.getDamage(self, t)) or 0
		local armor = t.getArmor(self, t)
		return ([[냉기 주입이 활성화 중인 동안, 연금술 폭탄이 연금술 골렘에게 %d 턴 동안 얼음막을 씌웁니다.
		이 얼음막은 골렘에게 추가 방어도를 %d 부여하며, 골렘을 근접 공격하는 적들은 %0.1f 냉기 피해로 반격받습니다. 또한 골렘의 피해가 50%% 만큼 냉기 피해로 전환됩니다.
		기술의 효과는 골렘의 피해 변화량과 기술 레벨, 시전자의 주문력의 영향을 받아 증가합니다.]]):
		format(duration, armor, dam)
	end,
}

newTalent{
	name = "Flash Freeze",
	kr_name = "순간 동결",
	type = {"spell/frost-alchemy",3},
	require = spells_req3,
	points = 5,
	mana = 30,
	cooldown = 20,
	requires_target = true,
	tactical = { DISABLE = { stun = 1 }, ATTACKAREA = { COLD = 2 } },
	no_energy = true,
	range = 0,
	getDuration = function(self, t) return math.floor(self:combatScale(self:combatSpellpower(0.03) * self:getTalentLevel(t), 2, 0, 10, 8)) end,
	radius = function(self, t) return math.floor(self:combatTalentScale(t, 2, 6)) end,
	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 250) end,
	target = function(self, t)
		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), friendlyfire=false, talent=t}
	end,
	action = function(self, t)
		local tg = self:getTalentTarget(t)
		local grids = self:project(tg, self.x, self.y, DamageType.COLDNEVERMOVE, {dur=t.getDuration(self, t), dam=t.getDamage(self, t)})
		game.level.map:particleEmitter(self.x, self.y, tg.radius, "ball_ice", {radius=tg.radius})
		game:playSoundNear(self, "talents/ice")
		return true
	end,
	info = function(self, t)
		local radius = self:getTalentRadius(t)
		return ([[주변 %d 칸 반경에 냉기를 폭발시켜, %0.1f 냉기 피해를 주고 적들의 발을 %d 턴 동안 얼려 움직이지 못하게 만듭니다.
		얼어붙은 발 상태효과에 걸리면 이동을 할 수 없게 되지만, 다른 행동에는 영향을 주지 않습니다.
		상태효과의 지속 시간은 주문력의 영향을 받아 증가합니다.]]):format(radius, damDesc(self, DamageType.COLD, t.getDamage(self, t)), t.getDuration(self, t))
	end,
}

newTalent{
	name = "Ice Core", short_name = "BODY_OF_ICE",
	kr_name = "얼음 핵",
	type = {"spell/frost-alchemy",4},
	require = spells_req4,
	mode = "sustained",
	cooldown = 40,
	sustain_mana = 100,
	points = 5,
	range = 6,
	tactical = { BUFF=1 },
	critResist = function(self, t) return self:combatTalentScale(t, 10, 50) end,
	getResistance = function(self, t) return self:combatTalentSpellDamage(t, 5, 45) end,
	getAffinity = function(self, t) return self:combatTalentLimit(t, 50, 5, 20) end, -- Limit <50%
	activate = function(self, t)
		game:playSoundNear(self, "talents/ice")
		local ret = {}
		self:addShaderAura("body_of_ice", "crystalineaura", {}, "particles_images/spikes.png")
		ret.particle = self:addParticles(Particles.new("snowfall", 1))
		self:talentTemporaryValue(ret, "resists", {[DamageType.PHYSICAL] = t.getResistance(self, t) * 0.6})
		self:talentTemporaryValue(ret, "damage_affinity", {[DamageType.COLD] = t.getAffinity(self, t)})
		self:talentTemporaryValue(ret, "ignore_direct_crits", t.critResist(self, t))
		return ret
	end,
	deactivate = function(self, t, p)
		self:removeParticles(p.particle)
		self:removeShaderAura("body_of_ice")
		return true
	end,
	info = function(self, t)
		local resist = t.getResistance(self, t)
		local crit = t.critResist(self, t)
		return ([[육신을 순수한 냉기로 바꿔, 냉기 피해 친화도를 %d%% / 물리 저항력을 %d%% 상승시킵니다.
		시전자를 직접 대상으로 한 모든 치명타 공격은 치명타 배수가 %d%% 감소하게 됩니다. (보통 피해량 이하로 줄어들지는 않습니다)
		기술의 효과는 주문력의 영향을 받아 증가합니다.]]):
		format(t.getAffinity(self, t), resist, resist * 0.6, crit)
	end,
}
